/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package credit.paysystem;

import Modelo.Carrera;
import Modelo.Membresia;
import Modelo.Perfil;
import Modelo.Usuario;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javax.swing.JOptionPane;
import mx.its.LnLocal.CarreraLnLocal;
import mx.its.LnLocal.MembresiaLnLocal;
import mx.its.LnLocal.PerfilLnLocal;
import mx.its.LnLocal.UsuarioLnLocal;
import mx.its.ln.CarreraLN;
import mx.its.ln.MembresiaLN;
import mx.its.ln.PerfilLN;
import mx.its.ln.UsuarioLN;

/**
 * FXML Controller class
 *
 * @author Grnmnd
 */
public class UsuariosController implements Initializable {

    //-------------------AddMembresia---------------------
    @FXML
    TitledPane InternalAddMembresia;
    @FXML
    ComboBox membresia;
    @FXML
    ComboBox dia;
    @FXML
    ComboBox mes;
    @FXML
    ComboBox anno;
    @FXML
    Label costo;   
    @FXML
    TextField usuario;
    @FXML
    Button asignar;
    //-------------------END-AddMembresia---------------------
    @FXML
    AnchorPane VentanaUsuarios;
    @FXML
    Button agregar;
    @FXML
    Button editar;
    @FXML
    Button eliminar;
    @FXML
    TextField criterioBusqueda;
    @FXML
    Label Usuarios;
    @FXML
    TableView TablaUsuarios;
    @FXML
    TitledPane Internal;
    @FXML
    TextField CampoId;
    @FXML
    TextField CampoNombre;
    @FXML
    TextField CampoNoControl;
    @FXML
    TextField CampoAPaterno;
    @FXML
    TextField CampoAMaterno;
    @FXML
    TextField CampoMail;
    @FXML
    TextField CampoSaldo;
    @FXML
    TextField CampoPass;
    @FXML
    TextField CampoConfirmar;
    @FXML
    Label Encabezado;
    @FXML
    Label per;
    @FXML
    Label car;
    @FXML
    Button Agregar;
    @FXML
    Button Guardar;
    
    @FXML
    ComboBox comboCarreras;
    @FXML
    ComboBox comboPerfiles;
    static Usuario cs;
    boolean nuevo = false;

    @FXML
    public void actualizarLsita() {

        TableColumn No_Control = new TableColumn("NO. CONTROL");
        No_Control.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("noControl"));
        No_Control.setPrefWidth(200);

        TableColumn Nombre = new TableColumn("NOMBRE");
        Nombre.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("nombre"));
        Nombre.setPrefWidth(200);

        TableColumn AMat = new TableColumn("Apellido Materno");
        AMat.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("aMaterno"));
        AMat.setPrefWidth(200);

        TableColumn APat = new TableColumn("Apellido Paterno");
        APat.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("aPaterno"));
        APat.setPrefWidth(200);

        TableColumn Mail = new TableColumn("Correo");
        Mail.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("correo"));
        Mail.setPrefWidth(200);

        TableColumn Saldo = new TableColumn("SALDO");
        Saldo.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("saldo"));
        Saldo.setPrefWidth(200);


        UsuarioLnLocal tipomovln = new UsuarioLN();

        List<Usuario> lst = new ArrayList<>();

        for (Usuario c : tipomovln.getList()) {
            lst.add(c);
        }

        ObservableList<Usuario> k = FXCollections.observableArrayList(lst);
        TablaUsuarios.setItems(k);

        TablaUsuarios.getColumns().setAll(No_Control, Nombre, APat, AMat, Saldo, Mail);


    }

    @FXML
    public void NoControl() {
        System.out.println("PERFIL" + MovimientosController.Autoriza.getIdPerfil().getId());
        if (MovimientosController.Autoriza.getIdPerfil().getId() == 3 || MovimientosController.Autoriza.getIdPerfil().getId() == 4|| MovimientosController.Autoriza.getIdPerfil().getId() == 5) {
            UsuarioLnLocal usuarioLN = new UsuarioLN();
            cs = usuarioLN.getPorNoControl(CampoNoControl.getText());
            if (cs != null) {
                System.out.println(nuevo);
                if (!nuevo) {
                    CampoNombre.setText(cs.getNombre());
                    CampoAPaterno.setText(cs.getAPaterno());
                    CampoAMaterno.setText(cs.getAMaterno());
                    CampoId.setText(cs.getId() + "");
                    CampoMail.setText(cs.getCorreo());
                    CampoSaldo.setText(cs.getSaldo() + "");
                } else {
                    JOptionPane.showMessageDialog(null, "Ya Existe Usuario");
                    CampoNombre.setText("");
                    CampoSaldo.setText("");
                    CampoNoControl.setText("");
                    CampoNoControl.requestFocus();
                }
            } else {
                CampoNombre.setText("");
                CampoSaldo.setText("");
                CampoNoControl.requestFocus();
            }
        }

    }

    @FXML
    public void addMembresia() throws IOException {
        InternalAddMembresia.setVisible(true);

    }
    
    @FXML
    public void addMembresiaOK() throws IOException {
        InternalAddMembresia.setVisible(false);

    }
    
    @FXML
    public void Agregar() {
        System.out.println("Agregar.....");
        UsuarioLnLocal usuarioln = new UsuarioLN();
        Usuario usuario = new Usuario();
        if (!CampoNoControl.getText().isEmpty()) {
            if (CampoConfirmar.getText().equals(CampoPass.getText())) {
                try {
                    Integer.parseInt(CampoNoControl.getText());
                    usuario.setNombre(CampoNombre.getText());
                    usuario.setAPaterno(CampoAPaterno.getText());
                    usuario.setAMaterno(CampoAMaterno.getText());
                    usuario.setContrasenia(CampoPass.getText());
                    usuario.setCorreo(CampoMail.getText());
                    usuario.setNoControl(CampoNoControl.getText());
                    usuario.setSaldo(BigDecimal.valueOf(0));
                    try {
                        usuario.setIdCarrera((Carrera) comboCarreras.getSelectionModel().getSelectedItem());
                        usuario.setIdPerfil((Perfil) comboPerfiles.getSelectionModel().getSelectedItem());
                        usuarioln.registrar(usuario);
                        int x = JOptionPane.showConfirmDialog(null, "REGISTRO COMPLETO \n ¿¿desea agregar otro usurio??");
                        if (x != 0) {
                            Cancelar();
                        }
                        CampoId.setText("");
                        CampoNombre.setText("");
                        CampoNombre.requestFocus();
                    } catch (Exception r) {
                        System.out.println(r);
                        JOptionPane.showMessageDialog(null, "Seleccione una carrera y perfil");
                    }
                } catch (Exception t) {
                    JOptionPane.showMessageDialog(null, "No Control Invalido");
                }

            } else {
                JOptionPane.showMessageDialog(null, "Contraseñas no Coinciden");
            }
        } else {
            JOptionPane.showMessageDialog(null, "Campos No control o Saldo no validos");
        }


    }

    @FXML
    public void Guardar() {
        System.out.println("GUARDANDO CAMBIOS...");
        UsuarioLnLocal usuarioLnLocal = new UsuarioLN();
        if (!CampoPass.getText().isEmpty() && CampoConfirmar.getText().equals(CampoPass.getText()) && !CampoNoControl.getText().isEmpty() && !CampoSaldo.getText().isEmpty()) {
            try {
                Integer.parseInt(CampoNoControl.getText());

                if (MovimientosController.Autoriza.getIdPerfil().getId() == 5) {

                    cs.setNombre(CampoNombre.getText());
                    cs.setAPaterno(CampoAPaterno.getText());
                    cs.setAMaterno(CampoAMaterno.getText());
                    cs.setContrasenia(CampoPass.getText());
                    cs.setCorreo(CampoMail.getText());
                    cs.setNoControl(CampoNoControl.getText());
                    cs.setSaldo(BigDecimal.valueOf(Double.parseDouble(CampoSaldo.getText())));
                    try {
                        cs.setIdCarrera((Carrera) comboCarreras.getSelectionModel().getSelectedItem());
                        cs.setIdPerfil((Perfil) comboPerfiles.getSelectionModel().getSelectedItem());
                    } catch (Exception eer) {
                        System.out.println(eer);
                        eer.printStackTrace();
                    }
                } else {
                    cs.setContrasenia(CampoPass.getText());
                }

                try {
                    usuarioLnLocal.editar(cs);
                    int x = JOptionPane.showConfirmDialog(null, "REGISTRO COMPLETO \n ¿¿Desea modificar mas Campos??");
                    if (x != 0) {
                        Cancelar();
                        CampoId.setText("");
                        CampoNombre.setText("");
                        CampoNombre.requestFocus();
                    }
                } catch (Exception m) {
                    JOptionPane.showMessageDialog(null, "llenar Campos faltantes");
                }
            } catch (Exception t) {
                JOptionPane.showMessageDialog(null, "No Control Invalido");
            }
        } else {
            JOptionPane.showMessageDialog(null, "Contraseñas no Coinciden");
        }

    }

    @FXML
    public void Editar() {
        try {
            cs = (Usuario) TablaUsuarios.getSelectionModel().getSelectedItem();
            if (cs != null) {
                Encabezado.setText("Edicion de Usuario");
                Guardar.setVisible(true);
                Internal.setVisible(true);
                agregar.setDisable(true);
                editar.setDisable(true);
                eliminar.setDisable(true);

                CampoNombre.setText(cs.getNombre());
                CampoId.setText(cs.getId() + "");
                CampoAPaterno.setText(cs.getAPaterno());
                CampoAMaterno.setText(cs.getAMaterno());
                CampoMail.setText(cs.getCorreo());
                CampoNoControl.setText(cs.getNoControl());
                CampoSaldo.setText(cs.getSaldo() + "");
                CampoSaldo.setEditable(false);
                comboCarreras();
                comboPerfiles();
                comboCarreras.getSelectionModel().select(cs.getIdCarrera());
                comboPerfiles.getSelectionModel().select(cs.getIdPerfil());
            } else {
                JOptionPane.showMessageDialog(null, "Seleccione un Usuario");
            }
        } catch (Exception f) {
            System.out.println(f);
        }
    }

    @FXML
    public void Nuevo() {
        try {
            Encabezado.setText("Agregar Usuario");
            Agregar.setVisible(true);
            Internal.setVisible(true);
            agregar.setDisable(true);
            editar.setDisable(true);
            eliminar.setDisable(true);
            comboCarreras();
            comboPerfiles();
            nuevo = true;

        } catch (Exception f) {
            System.out.println(f);
        }
    }

    @FXML
    public void Cancelar() {
        CampoId.setText("");
        CampoNombre.setText("");
        Encabezado.setText(null);
        Agregar.setVisible(false);
        Guardar.setVisible(false);
        Internal.setVisible(false);
        agregar.setDisable(false);
        editar.setDisable(false);
        CampoPass.setText("");
        CampoConfirmar.setText("");
        CampoAPaterno.setText("");
        CampoAMaterno.setText("");
        CampoNoControl.setText("");
        CampoMail.setText("");
        CampoSaldo.setText("");

        eliminar.setDisable(false);

        CampoNoControl.setEditable(true);
        CampoAMaterno.setEditable(true);
        CampoAPaterno.setEditable(true);
        CampoMail.setEditable(true);
        CampoNombre.setEditable(true);
        comboCarreras.setVisible(true);
        comboPerfiles.setVisible(true);
        per.setVisible(true);
        car.setVisible(true);
        if (MovimientosController.Autoriza.getIdPerfil().getId() != 5) {
            VentanaUsuarios.getScene().getWindow().hide();
        }
        nuevo = false;
    }

    @FXML
    public void oEliminar() {
        try {
            Usuario c = (Usuario) TablaUsuarios.getSelectionModel().getSelectedItem();
            System.out.println(c);
            int x = JOptionPane.showConfirmDialog(null, "¿¿Esta Ud. Seguro que desea ELIMINAR la Usuario??");
            if (x == 0) {
                UsuarioLnLocal carreraln = new UsuarioLN();
                System.out.println("borrando a " + c);
                carreraln.eliminar(c);
                System.out.println("borrado");
                actualizarLsita();
            }
        } catch (Exception f) {
            System.out.println(f);
        }
    }

    @FXML
    public void buscar() {
        UsuarioLnLocal tipomovln = new UsuarioLN();
        String id;
        id = criterioBusqueda.getText();

        ObservableList<Usuario> k = FXCollections.observableArrayList();
        for (Usuario tipomovimiento : tipomovln.getPorPalabra(id)) {
            k.add(tipomovimiento);
        }
//        TableColumn ID = new TableColumn("ID");
//        ID.setCellValueFactory(
//                new PropertyValueFactory<Usuario, String>("id"));

        TableColumn No_Control = new TableColumn("NO. CONTROL");
        No_Control.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("noControl"));
        No_Control.setPrefWidth(200);

        TableColumn Nombre = new TableColumn("NOMBRE");
        Nombre.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("nombre"));
        Nombre.setPrefWidth(200);

        TableColumn AMat = new TableColumn("Apellido Materno");
        AMat.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("aMaterno"));
        AMat.setPrefWidth(200);

        TableColumn APat = new TableColumn("Apellido Paterno");
        APat.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("aPaterno"));
        APat.setPrefWidth(200);

        TableColumn Mail = new TableColumn("Correo");
        Mail.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("correo"));
        Mail.setPrefWidth(200);

        TableColumn Saldo = new TableColumn("SALDO");
        Saldo.setCellValueFactory(
                new PropertyValueFactory<Usuario, String>("saldo"));
        Saldo.setPrefWidth(200);


        TablaUsuarios.setItems(k);
        TablaUsuarios.getColumns().setAll(No_Control, Nombre, APat, AMat, Saldo, Mail);


    }

    @FXML
    public void comboCarreras() {
        CarreraLnLocal carreraln = new CarreraLN();
        ObservableList<Carrera> k = FXCollections.observableArrayList();
        for (Carrera carrera : carreraln.getList()) {
            k.add(carrera);
        }
        comboCarreras.setItems(k);
    }

    @FXML
    public void comboPerfiles() {
        PerfilLnLocal perfilLnLn = new PerfilLN();
        ObservableList<Perfil> k = FXCollections.observableArrayList();
        for (Perfil perfil : perfilLnLn.getList()) {
            k.add(perfil);
        }
        comboPerfiles.setItems(k);
    }

    public void terminoCambioPass() {
    }

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        MembresiaLnLocal mll = new MembresiaLN();
        ObservableList<Membresia> k = FXCollections.observableArrayList(mll.getTodo());
        membresia.setItems(k);
        System.out.println("INICIALIZA");
        switch (MovimientosController.Autoriza.getIdPerfil().getId()) {
            case 1:
                System.out.println("ingreso al sistema" + cs);
                CampoNoControl.setEditable(false);
                CampoAMaterno.setEditable(false);
                CampoAPaterno.setEditable(false);
                CampoMail.setEditable(false);
                CampoNombre.setEditable(false);
                comboCarreras.setVisible(false);
                comboPerfiles.setVisible(false);
                per.setVisible(false);
                car.setVisible(false);
                CampoNombre.setText(cs.getNombre());
                CampoId.setText(cs.getId() + "");
                CampoAPaterno.setText(cs.getAPaterno());
                CampoAMaterno.setText(cs.getAMaterno());
                CampoMail.setText(cs.getCorreo());
                CampoNoControl.setText(cs.getNoControl());
                CampoSaldo.setText(cs.getSaldo() + "");
                CampoSaldo.setEditable(false);
                Encabezado.setText("Edicion de Usuario");
                Guardar.setVisible(true);
                Internal.setVisible(true);
                agregar.setDisable(true);
                editar.setDisable(true);
                eliminar.setDisable(true);

                break;
            case 3:

                System.out.println("ingreso al sistema" + cs);
                CampoNoControl.setEditable(true);
                CampoAMaterno.setEditable(false);
                CampoAPaterno.setEditable(false);
                CampoMail.setEditable(false);
                CampoNombre.setEditable(false);
                comboCarreras.setVisible(false);
                comboPerfiles.setVisible(false);
                per.setVisible(false);
                car.setVisible(false);
                if (cs != null) {
                    CampoNombre.setText(cs.getNombre());
                    CampoId.setText(cs.getId() + "");
                    CampoAPaterno.setText(cs.getAPaterno());
                    CampoAMaterno.setText(cs.getAMaterno());
                    CampoMail.setText(cs.getCorreo());
                    CampoNoControl.setText(cs.getNoControl());
                    CampoSaldo.setText(cs.getSaldo() + "");
                }
                CampoSaldo.setEditable(false);
                Encabezado.setText("Edicion de Usuario");
                Guardar.setVisible(true);
                Internal.setVisible(true);
                agregar.setDisable(true);
                editar.setDisable(true);
                eliminar.setDisable(true);
                break;
            case 4:
//                
                break;
            case 5:
                System.out.println("Administrator");
                eliminar.setVisible(false);
                break;

        }

    }
}
